package com.szholly.data.general.metadata.table;

import com.szholly.utils.util.StringUtils;
import com.szholly.data.general.*;

/**
 * 类功能说明 定义表结构实体
 */
public class TableMetadataRow extends RowBase {

	/**
	 * 
	 */
	private static final long serialVersionUID = -7828937287884523173L;

	/**
	 * 元数据表ID
	 */
	public final static String FIELD_TABLEID = "S_TABLEID";

	/**
	 * 字段名称
	 */
	public final static String FIELD_FIELDNAME = "S_FIELDNAME";

	/**
	 * 字段ID(排序号)
	 */
	public final static String FIELD_FIELDID = "I_FIELDID";

	/**
	 * 字段别名
	 */
	public final static String FIELD_FIELDALIASNAME = "S_FIELDALIASNAME";

	/**
	 * 字段类型
	 */
	public final static String FIELD_DATATYPE = "S_DATATYPE";

	/**
	 * 是否是自动增值列
	 */
	public final static String FIELD_ISAUTO = "S_ISAUTO";

	/**
	 * 是否是主键
	 */
	public final static String FIELD_ISKEY = "S_ISKEY";

	/**
	 * 唯一键分组
	 */
	public final static String FIELD_UNIQUEGROUP = "S_UNIQUEGROUP";

	/**
	 * 长度
	 */
	public final static String FIELD_MAXLEN = "I_MAXLEN";

	/**
	 * 小数位长度
	 */
	public final static String FIELD_DECIMALDIGITS = "I_DECIMALDIGITS";

	/**
	 * 编码规则
	 */
	public final static String FIELD_CODERULE = "S_CODERULE";

	/**
	 * 编码规则取值表达式
	 */
	public final static String FIELD_CODERULEEXP = "S_CODERULEEXP";

	/**
	 * 字典域
	 */
	public final static String FIELD_CODETABLEPK = "S_CODETABLEPK";

	/**
	 * 字典域条件
	 */
	public final static String FIELD_CODETABLEWHERE = "S_CODETABLEWHERE";

	/**
	 * 字典获取表达式
	 */
	public final static String FIELD_CODEGETSCRIPT = "S_CODEGETSCRIPT";

	/**
	 * 字典设置表达式
	 */
	public final static String FIELD_CODESETSCRIPT = "S_CODESETSCRIPT";

	/**
	 * 是否可以为空
	 */
	public final static String FIELD_ALLOWNULL = "S_ALLOWNULL";

	/**
	 * 是否只读
	 */
	public final static String FIELD_READONLY = "S_READONLY";

	/**
	 * 默认值
	 */
	public final static String FIELD_DEFAULTVALUE = "S_DEFAULTVALUE";

	/**
	 * 录入使用控件
	 */
	public final static String FIELD_CONTROLTYPE = "S_CONTROLTYPE";

	/**
	 * 是否显示
	 */
	public final static String FIELD_CANSHOW = "S_CANSHOW";

	/**
	 * 字段单位
	 */
	public final static String FIELD_UNIT = "S_UNIT";

	/**
	 * 字段分组
	 */
	public final static String FIELD_GROUP = "S_GROUP";

	/**
	 * 字段是否必需(注册时可忽略)
	 */
	public final static String FIELD_ISESSENTIAL = "S_ISESSENTIAL";

	/**
	 * 是否是运算字段，默认为否(主键，外键，同步字段，计算相关字段)
	 */
	public final static String FIELD_ISCRUCIAL = "S_ISCRUCIAL";

	/**
	 * 上下级分组
	 */
	public final static String FIELD_RELATIONGROUP = "S_RELATIONGROUP";

	/**
	 * 上下级索引
	 */
	public final static String FIELD_RELATIONINDEX = "I_RELATIONINDEX";

	/**
	 * 使用控件宽度(主要用于Grid展示)
	 */
	public final static String FIELD_CONTROLWIDTH = "I_CONTROLWIDTH";

	/**
	 * 元数据表ID
	 */
	public String getTableID() {
		return (String) getValue(GlobalDataType.String, FIELD_TABLEID);
	}

	public void setTableID(String value) {
		setValue(FIELD_TABLEID, value);
	}

	/**
	 * 字段名称
	 */
	public String getFieldName() {
		return (String) getValue(GlobalDataType.String, FIELD_FIELDNAME);
	}

	public void setFieldName(String value) {
		setValue(FIELD_FIELDNAME, value);
	}

	/**
	 * 字段ID(排序号)
	 */
	public int getFieldID() {
		Integer result = (Integer) getValue(GlobalDataType.Int32, FIELD_FIELDID);
		if (null == result) {
			return 0;
		} else {
			return result.intValue();
		}
	}

	public void setFieldID(int value) {
		setValue(FIELD_FIELDID, value);
	}

	/**
	 * 字段别名
	 */
	public String getFieldAliasName() {
		return (String) getValue(GlobalDataType.String, FIELD_FIELDALIASNAME);
	}

	public void setFieldAliasName(String value) {
		setValue(FIELD_FIELDALIASNAME, value);
	}

	/**
	 * 字段类型
	 */
	public String getDataType() {
		return (String) getValue(GlobalDataType.String, FIELD_DATATYPE);
	}

	public void setDataType(String value) {
		setValue(FIELD_DATATYPE, value);
	}

	/**
	 * 是否是自动增值列
	 */
	public boolean getIsAuto() {
		return getBool(FIELD_ISAUTO);
	}

	public void setIsAuto(boolean value) {
		setBool(value, FIELD_ISAUTO);
	}

	private void setBool(boolean value, String fieldName) {
		if (value)
			setValue(fieldName, "是");
		else
			setValue(fieldName, "否");
	}

	private boolean getBool(String fieldName) {
		String strBool = (String) getValue(GlobalDataType.String, fieldName);
		if (StringUtils.IsNullOrSpace(strBool))
			return false;
		else {
			strBool = strBool.trim().toUpperCase();
			if (strBool.equals("1") || strBool.equals("TRUE")
					|| strBool.equals("是"))
				return true;
			else
				return false;
		}
	}

	/**
	 * 是否是主键
	 */
	public boolean getIsKey() {
		return getBool(FIELD_ISKEY);
	}

	public void setIsKey(boolean value) {
		setBool(value, FIELD_ISKEY);
	}

	/**
	 * 唯一键分组
	 */
	public String getUniqueGroup() {
		return (String) getValue(GlobalDataType.String, FIELD_UNIQUEGROUP);
	}

	public void setUniqueGroup(String value) {
		setValue(FIELD_UNIQUEGROUP, value);
	}

	/**
	 * 长度
	 */
	public int getMaxLen() {
		Integer result = (Integer) getValue(GlobalDataType.Int32, FIELD_MAXLEN);
		if (null == result) {
			return 0;
		} else {
			return result.intValue();
		}
	}

	public void setMaxLen(int value) {
		setValue(FIELD_MAXLEN, value);
	}

	/**
	 * 小数位长度
	 */
	public int getDecimaldigits() {
		int result = 0;
		try {
			result = (Integer) getValue(GlobalDataType.Int32,
					FIELD_DECIMALDIGITS);
		} catch (Exception e) {
		}

		return result;
	}

	public void setDecimaldigits(int value) {
		setValue(FIELD_DECIMALDIGITS, value);
	}

	/**
	 * 编码规则
	 */
	public String getCodeRule() {
		return (String) getValue(GlobalDataType.String, FIELD_CODERULE);
	}

	public void setCodeRule(String value) {
		setValue(FIELD_CODERULE, value);
	}

	/**
	 * 编码规则取值表达式
	 */
	public String getCodeRuleExp() {
		return (String) getValue(GlobalDataType.String, FIELD_CODERULEEXP);
	}

	public void setCodeRuleExp(String value) {
		setValue(FIELD_CODERULEEXP, value);
	}

	/**
	 * 字典域
	 */
	public String getCodeTablePK() {
		return (String) getValue(GlobalDataType.String, FIELD_CODETABLEPK);
	}

	public void setCodeTablePK(String value) {
		setValue(FIELD_CODETABLEPK, value);
	}

	/**
	 * 字典域条件
	 */
	public String getCodeTableWhere() {
		return (String) getValue(GlobalDataType.String, FIELD_CODETABLEWHERE);
	}

	public void setCodeTableWhere(String value) {
		setValue(FIELD_CODETABLEWHERE, value);
	}

	/**
	 * 字典获取表达式
	 */
	public String getCodeGetScript() {
		return (String) getValue(GlobalDataType.String, FIELD_CODEGETSCRIPT);
	}

	public void setCodeGetScript(String value) {
		setValue(FIELD_CODEGETSCRIPT, value);
	}

	/**
	 * 字典设置表达式
	 */
	public String getCodeSetScript() {
		return (String) getValue(GlobalDataType.String, FIELD_CODESETSCRIPT);
	}

	public void setCodeSetScript(String value) {
		setValue(FIELD_CODESETSCRIPT, value);
	}

	/**
	 * 是否可以为空
	 */
	public boolean getAllowNull() {
		return getBool(FIELD_ALLOWNULL);
	}

	public void setAllowNull(boolean value) {
		setBool(value, FIELD_ALLOWNULL);
	}

	/**
	 * 是否只读
	 */
	public boolean getReadOnly() {
		return getBool(FIELD_READONLY);
	}

	public void setReadOnly(boolean value) {
		setBool(value, FIELD_READONLY);
	}

	/**
	 * 默认值
	 */
	public String getDefaultValue() {
		return (String) getValue(GlobalDataType.String, FIELD_DEFAULTVALUE);
	}

	public void setDefaultValue(String value) {
		setValue(FIELD_DEFAULTVALUE, value);
	}

	/**
	 * 录入使用控件
	 */
	public String getControlType() {
		return (String) getValue(GlobalDataType.String, FIELD_CONTROLTYPE);
	}

	public void setControlType(String value) {
		setValue(FIELD_CONTROLTYPE, value);
	}

	/**
	 * 是否显示
	 */
	public boolean getCanShow() {
		return getBool(FIELD_CANSHOW);
	}

	public void setCanShow(boolean value) {
		setBool(value, FIELD_CANSHOW);
	}

	/**
	 * 字段单位
	 */
	public String getUnit() {
		return (String) getValue(GlobalDataType.String, FIELD_UNIT);
	}

	public void setUnit(String value) {
		setValue(FIELD_UNIT, value);
	}

	/**
	 * 字段分组
	 */
	public String getGroup() {
		return (String) getValue(GlobalDataType.String, FIELD_GROUP);
	}

	public void setGroup(String value) {
		setValue(FIELD_GROUP, value);
	}

	/**
	 * 字段是否必需(注册时可忽略)
	 */
	public boolean getIsEssential() {
		return getBool(FIELD_ISESSENTIAL);
	}

	public void setIsEssential(boolean value) {
		setBool(value, FIELD_ISESSENTIAL);
	}

	/**
	 * 是否是运算字段，默认为否(主键，外键，同步字段，计算相关字段)
	 */
	public boolean getIsCrucial() {
		return getBool(FIELD_ISCRUCIAL);
	}

	public void setIsCrucial(boolean value) {
		setBool(value, FIELD_ISCRUCIAL);
	}

	/**
	 * 上下级分组
	 */
	public String getRelationGroup() {
		return (String) getValue(GlobalDataType.String, FIELD_RELATIONGROUP);
	}

	public void setRelationGroup(String value) {
		setValue(FIELD_RELATIONGROUP, value);
	}

	/**
	 * 上下级索引
	 */
	public int getRelationIndex() {
		Integer result = 0;
		try {
			result = (Integer) getValue(GlobalDataType.Int32,
					FIELD_RELATIONINDEX);
		} catch (Exception e) {
		}
		if (null == result) {
			return 0;
		} else {
			return result.intValue();
		}
	}

	public void setRelationIndex(int value) {
		setValue(FIELD_RELATIONINDEX, value);
	}

	/**
	 * 字段ID(排序号)
	 */
	public int getControlWidth() {
		Integer result = 0;
		try {
			result = (Integer) getValue(GlobalDataType.Int32,
					FIELD_CONTROLWIDTH);
		} catch (Exception e) {
		}

		if (null == result) {
			return 0;
		} else {
			return result.intValue();
		}
	}

	public void setControlWidth(int value) {
		setValue(FIELD_CONTROLWIDTH, value);
	}

}
